package com.traffic.controller;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import cn.hutool.core.collection.CollUtil;
import com.traffic.constant.Status;
import com.traffic.entity.About;
import com.traffic.entity.AppConfig;
import com.traffic.entity.Contact;
import com.traffic.exception.BaseException;
import com.traffic.model.ApiResponse;
import com.traffic.service.AboutService;
import com.traffic.service.AppConfigService;
import com.traffic.service.ContactService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
//import org.checkerframework.checker.units.qual.A;
//import org.checkerframework.checker.units.qual.C;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * Created by IntelliJ IDEA.
 * User: KingRainGrey
 * Date: 2020/9/9
 */
@Api(tags = "APP的相关配置信息")
@RequestMapping(value = "/app")
@RestController
@Slf4j
public class AppBaseController {
    @Autowired
    private AboutService aboutService;
    @Autowired
    private ContactService contactService;
    @Autowired
    private AppConfigService appConfigService;

    @ApiOperation(value = "【添加关于我们】", notes = "添加Token,需要先上传logo获取id")
    @PostMapping("/about")
    public ApiResponse addAbout(@RequestBody Map<String, Object> about) {
//        String param[] = new String[] {"logo", "version", "url", "features", "legalNotices", "platformAgreement","privacyPolicy"};
//        List<String> paramList = CollUtil.newArrayList(param);
//        if (!paramList.containsAll(CollUtil.newArrayList(about.keySet().toArray()))) {
//            throw new BaseException(Status.PARAM_ERROR);
//        }
        About a = new About();
        BeanUtil.copyProperties(about, a, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
        aboutService.add(a);
        return ApiResponse.ofStatus(Status.OK);
    }

    @ApiOperation(value = "【获取当前启用的关于我们】")
    @GetMapping("/about")
    public ApiResponse getAbout() {
        About about = aboutService.get();
        return ApiResponse.ofStatus(Status.OK, about);
    }

    @ApiOperation(value = "【添加联系我们】", notes = "添加Token")
    @PostMapping("/contact")
    public ApiResponse addContact(@RequestBody Map<String, Object> contact) {
        String param[] = new String[] {"company","address","phone", "mailbox", "url","img"};
        List<String> paramList = CollUtil.newArrayList(param);
        if (!paramList.containsAll(CollUtil.newArrayList(contact.keySet().toArray()))) {
            throw new BaseException(Status.PARAM_ERROR);
        }
        Contact c = new Contact();
        BeanUtil.copyProperties(contact, c, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
        contactService.add(c);
        return ApiResponse.ofStatus(Status.OK);
    }

    @ApiOperation(value = "【获取联系我们】")
    @GetMapping("/contact")
    public ApiResponse getContact() {
        Contact contact = contactService.get();
        return ApiResponse.ofStatus(Status.OK, contact);
    }

    @ApiOperation(value = "【添加新的APP配置:启动页-用户协议-隐私协议】", notes = "添加Token")
    @PostMapping("/config")
    public ApiResponse addAppConfig(@RequestBody Map<String, Object> config) {
        String param[] = new String[] {"page", "platformUserAgreement", "privacyPolicy"};
        List<String> paramList = CollUtil.newArrayList(param);
        if (!paramList.containsAll(CollUtil.newArrayList(config.keySet().toArray()))) {
            throw new BaseException(Status.PARAM_ERROR);
        }
        AppConfig appConfig = new AppConfig();
        BeanUtil.copyProperties(config, appConfig, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
        appConfigService.addOrEditConfig(appConfig);
        return ApiResponse.ofStatus(Status.OK);
    }

    @ApiOperation(value = "【获取当前的APP配置:启动页-用户协议-隐私协议】")
    @GetMapping("/config")
    public ApiResponse getConfig() {
        AppConfig appConfig = appConfigService.getConfig();
        return ApiResponse.ofStatus(Status.OK, appConfig);
    }

    @ApiOperation(value = "【隐私政策网址】")
    @GetMapping("/privacypolicy")
    public String PrivacyPolicy() {
        String page = "<div class=\"el-card is-always-shadow\"><!----><div class=\"el-card__body\"><h1>大衡APP隐私政策</h1></div></div>"
                +"<div class=\"el-card is-always-shadow\"><!----><div class=\"el-card__body\"><p>欢迎您使用大衡软件服务（以下简称“本软件”），\n" +
                "        大衡是由杭州市高骐科技有限公司（以下简称“本公司”）向大衡用户提供轨迹服务。\n" +
                "        为保证您的权益，便于更好地使用本软件服务，请您务必在注册前认真阅读本协议，\n" +
                "        若您阅读并接受本协议，使用本软件提供的产品和服务，即视为您受本协议的约束，若您不同意本协议，请勿使用本软件任何产品和服务。</p><p>本软件尊重并保护所有使用服务用户的个人隐私权。\n" +
                "        为了给您提供更准确、更有个性化的服务，本软件会按照本隐私权政策的规定使用和披露您的个人信息。\n" +
                "        但本软件将以高度的勤勉、审慎义务对待这些信息。\n" +
                "        除本隐私权政策另有规定外，在征得您的同意前，本软件不会将这些信息向其他人或向第三方提供。\n" +
                "        本软件会不定时更新本隐私权政策。您在同意本软件服务使用协议之时，即表示您已经同意本隐私权政策的全部内容。\n" +
                "        本隐私权政策属于本软件服务使用协议不可分割的一部分。</p><h2>一.适用范围</h2><p>在您使用本软件网络服务，本软件会接收记录您提交的信息，不会记录您的手机上的信息，\n" +
                "        包括但不限于您的位置信息、相册和相机的访问、使用的语言、访问日期和时间、软硬件特征信息等数据。</p><h2>二.信息的使用</h2><p>在获得您提交的数据之后，本软件会将其上传至服务器，以便您能够更好地使用服务；</p><h2>三.信息披露</h2><p>本软件不会将您的信息披露给不受信任的第三方。\n" +
                "         根据法律的有关规定，或者行政或司法机构的要求，向第三方或者行政、司法机构披露；\n" +
                "          如您出现违反中国有关法律、法规或者相关规则的情况，需要向第三方披露；</p><h2>四.信息存储和交换</h2><p>本软件收集的有关您的信息和资料将保存在本软件及（或）其关联公司的服务器上；</p><h2>五.信息安全</h2><p>本软件提供您所属设备的信息查询功能，请您妥善保护自己的个人信息，仅在必要的情形下向他人提供。如您发现自己的个人信息泄密，请您立即联络本软件客服，以便本软件采取相应措施。</p></div></div>";
        return page;
    }

    @ApiOperation(value = "【技术支持网址】")
    @GetMapping("/help")
    public String Help() {
        String page = "<div class=\"el-card is-always-shadow\"><!----><div class=\"el-card__body\"><h1>技术支持</h1></div></div>";
        return page;
    }
}
